{% set host_index = groups['trove'].index(inventory_hostname) % groups['rabbitmq'] | count %}
{% set rabbit_hosts = groups['rabbitmq'][host_index:] + groups['rabbitmq'][:host_index] %}
[DEFAULT]
# Show more verbose log output (sets INFO log level output)
verbose = True

# Show debugging output in logs (sets DEBUG log level output)
debug = {{ trove_debug }}

use_stderr = False

use_syslog = {{ trove_syslog_use }}

# Address to bind the API server
bind_host = 127.0.0.1

# Port the bind the API server to
bind_port = 8779

# Number of workers for the API service. The default will
# be the number of CPUs available. (integer value)
#trove_api_workers=None
trove_api_workers = {{ trove_api_workers }}

trove_conductor_workers = {{ trove_conductor_workers }}

#===================== RPC Configuration =================================

# URL representing the messaging driver to use and its full configuration.
# If not set, we fall back to the 'rpc_backend' option and driver specific
# configuration.
#transport_url=<None>
transport_url = rabbit://{% for host in rabbit_hosts %}{{ trove_rabbit_user }}:{{ trove_rabbit_password }}@{{ hostvars[host].ip.mgmt }}:5672{% if not loop.last %},{% endif %}{% endfor %}/{{ trove_rabbit_vhost }}

# The messaging driver to use. Options include rabbit, qpid and zmq.
# Default is rabbit. (string value)
#rpc_backend=rabbit

# The default exchange under which topics are scoped. May be
# overridden by an exchange name specified in the 'transport_url option.
control_exchange = trove

# ==================== RabbitMQ Configuration =======================

# Maximum line size of message headers to be accepted.
# max_header_line may need to be increased when using large tokens
# (typically those generated by the Keystone v3 API with big service
# catalogs)
# max_header_line = 16384

#DB Api Implementation
db_api_implementation = "trove.db.sqlalchemy.api"

# Configuration options for talking to nova via the novaclient.
trove_auth_url = {{ keystone_proto }}://{{ keystone_internal_address }}:5000/v2.0
#nova_compute_url = http://localhost:8774/v2
nova_compute_url = {{ os_proto }}://{{ os_internal_address }}:8774/v2
#cinder_url = http://localhost:8776/v1
#swift_url = http://localhost:8080/v1/AUTH_
#neutron_url = http://localhost:9696/

cinder_endpoint_type = internalURL
heat_endpoint_type = internalURL
neutron_endpoint_type = internalURL
nova_compute_endpoint_type = internalURL
swift_endpoint_type = internalURL

verify_swift_checksum_on_restore = {{ trove_verify_swift_checksum_on_restore }}

# nova_compute_url, cinder_url, swift_url, and heat_url can all be fetched
# from Keystone. To fetch from Keystone, comment out nova_compute_url,
# cinder_url, swift_url, and heat_url and optionally uncomment the lines below.

# Region name of this node. Used when searching catalog. Default value is None.
os_region_name = {{ keystone_region_name }}
# Service type to use when searching catalog.
#nova_compute_service_type = compute
# Service type to use when searching catalog.
#cinder_service_type = volumev2
# Service type to use when searching catalog.
#swift_service_type = object-store
# Service type to use when searching catalog.
#heat_service_type = orchestration
# Service type to use when searching catalog.
#neutron_service_type = network

# Config option for showing the IP address that nova doles out
# For nova-network, set this to the appropriate network label defined in nova
# For neutron, set this to .* since users can specify custom network labels
# You can also optionally specify regex'es to match the actual IP addresses
# ip_regex (white-list) is applied before black_list_regex in the filter chain
#network_label_regex = ^private$
network_label_regex = {{ trove_network_label_regex }}
ip_regex = {{ trove_network_ip_regex }}
black_list_regex = {{ trove_network_black_list_regex }}

# Config options for enabling volume service
#trove_volume_support = True
trove_volume_support = True
block_device_mapping = vdb
device_path = /dev/vdb
# Maximum volume size for an instance
max_accepted_volume_size = 10
max_instances_per_user = 5
# Maximum volume capacity (in GB) spanning across all trove volumes per tenant
max_volumes_per_user = 100
max_backups_per_user = 5
volume_time_out=30

# Nova server boot options
# sets the --config-drive argument when doing a nova boot
# (controls how file injection is handled by nova)
use_nova_server_config_drive = True

# Configuration options for talking to nova via the novaclient.
# These options are for an admin user in your keystone config.
# It proxy's the token received from the user to send to nova via this admin users creds,
# basically acting like the client via that proxy token.
nova_proxy_admin_user = {{ nova_admin_user }}
nova_proxy_admin_pass = {{ nova_admin_password }}
nova_proxy_admin_tenant_name = {{ nova_project_name }}
nova_proxy_admin_tenant_id = {{ nova_project_id.id }}

# Manager impl for the taskmanager
taskmanager_manager=trove.taskmanager.manager.Manager

# Manager sends Exists Notifications
exists_notification_transformer = trove.extensions.mgmt.instances.models.NovaNotificationTransformer

# Workaround for https://bugs.launchpad.net/trove/+bug/1402055
#exists_notification_transformer =

exists_notification_ticks = 30

# Taskmanager queue name
taskmanager_queue = taskmanager

# Config options for rate limits
http_get_rate = 200
http_post_rate = 200
http_put_rate = 200
http_delete_rate = 200
http_mgmt_post_rate = 200

# Trove DNS
trove_dns_support = False
dns_account_id = 123456
dns_auth_url = http://127.0.0.1:5000/v2.0
dns_username = user
dns_passkey = password
dns_ttl = 3600
dns_domain_name = 'trove.com.'
dns_domain_id = 11111111-1111-1111-1111-111111111111
dns_driver = trove.dns.designate.driver.DesignateDriver
dns_instance_entry_factory = trove.dns.designate.driver.DesignateInstanceEntryFactory
dns_endpoint_url = http://127.0.0.1/v1/
dns_service_type = dns

# Neutron
network_driver = trove.network.neutron.NeutronDriver
default_neutron_networks = {{ trove_net.id }}

# Trove Security Groups for Instances
trove_security_groups_support = True
trove_security_group_rule_cidr = 0.0.0.0/0

# Auth
admin_roles = admin

# Users to ignore for user create/list/delete operations
ignore_users = os_admin, root
ignore_dbs = lost+found, mysql, information_schema

# Guest related conf
agent_heartbeat_time = 10
agent_call_low_timeout = 5
agent_call_high_timeout = 150

# Reboot time out for instances
reboot_time_out = 60

# Trove api-paste file name
api_paste_config = api-paste.ini

# The manager class to use for conductor. (string value)
conductor_manager = trove.conductor.manager.Manager

# ============ Logging information =============================
#log_dir = /integration/report
#log_file = trove-api.log


[database]

# SQLAlchemy connection string for the reference implementation
# registry server. Any valid SQLAlchemy connection string is fine.
# See: http://www.sqlalchemy.org/docs/05/reference/sqlalchemy/connections.html#sqlalchemy.create_engine
# connection = sqlite:///trove_test.sqlite
#connection = sqlite:////var/lib/trove/trove_test.sqlite
#connection = mysql://root:e1a2c042c828d3566d0a@localhost/trove
#connection = postgresql://trove:trove@localhost/trove
connection = mysql+pymysql://{{ trove_db_user }}:{{ trove_db_password }}@{{ trove_mysql_server }}/{{ trove_db }}?charset=utf8
max_retries = -1
idle_timeout=180

[keystone_authtoken]
{% if SSLCACertificateFile != '' %}
cafile = {{ SSLCACertificateFile }}
{% endif %}
insecure = {{ ssl_insecure }}
auth_plugin = password
region_name = {{ keystone_region_name }}
signing_dir = /var/lib/trove/cache/api
auth_uri = {{ keystone_proto }}://{{ keystone_internal_address }}:5000
auth_url = {{ keystone_proto }}://{{ keystone_internal_address }}:35357
region_name = {{ keystone_region_name }}
user_domain_name = {{ trove_domain_name }}
username = {{ trove_admin_user }}
password = {{ trove_admin_password }}
project_domain_name = {{ trove_project_domain_name }}
project_name = {{ trove_project_name }}

memcached_servers = {% for host in groups['memcached'] %}{{ hostvars[host].ip.mgmt }}:11211{% if not loop.last %},{% endif %}{% endfor %}

token_cache_time = 300
revocation_cache_time = 60

# if your memcached server is shared, use these settings to avoid cache poisoning
memcache_security_strategy = ENCRYPT
memcache_secret_key = {{ memcache_secret_key }}


[oslo_messaging_notifications]

driver = messagingv2
transport_url = rabbit://{% for host in rabbit_hosts %}{{ trove_rabbit_user }}:{{ trove_rabbit_password }}@{{ hostvars[host].ip.mgmt }}:5672{% if not loop.last %},{% endif %}{% endfor %}/{{ trove_rabbit_vhost }}


[oslo_messaging_rabbit]

rabbit_ha_queues = true


# ============ SSL configuration (and enablement) =============================
# In order to enable SSL for the trove api server, uncomment
# the cert_file and key_file - and of course have those files
# accessible. The existence of those setting and files will
# enable SSL.

[profiler]
# If False fully disable profiling feature.
#enabled = False
# If False doesn't trace SQL requests.
#trace_sqlalchemy = True

[ssl]

#cert_file = /path/to/server.crt
#key_file = /path/to/server.key
#optional:
#ca_file = /path/to/ca_file

[mysql]
root_on_create = False
# Format (single port or port range): A, B-C
# where C greater than B
tcp_ports = 3306
volume_support = True
device_path = /dev/vdb

[redis]
tcp_ports = 6379
#redis uses local storage
volume_support = False
# default device_path = None

[cassandra]
tcp_ports = 7000, 7001, 9042, 9160
volume_support = True
device_path = /dev/vdb

[couchbase]
tcp_ports = 8091, 8092, 4369, 11209-11211, 21100-21199
volume_support = True
device_path = /dev/vdb

[mongodb]
tcp_ports = 2500, 27017
volume_support = True
device_path = /dev/vdb
num_config_servers_per_cluster = 1
num_query_routers_per_cluster = 1

[vertica]
tcp_ports = 5433, 5434, 22, 5444, 5450, 4803
udp_ports = 5433, 4803, 4804, 6453
volume_support = True
device_path = /dev/vdb
cluster_support = True
cluster_member_count = 3
api_strategy = trove.common.strategies.cluster.experimental.vertica.api.VerticaAPIStrategy
